/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tesis.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tesis.common.utils.CollectionsUtil;
import tesis.common.utils.ConvertBeanUtil;
import tesis.domain.MapaSincronizado;
import tesis.dto.in.MapaSincronizadoDTO;

import tesis.service.CrudService;
import tesis.service.MapaSincronizadoService;

/**
 *
 * @author hectdx
 */
@Service("syncService")
@Transactional
public class MapaSincronizadoServiceImpl implements MapaSincronizadoService{
    
    private static final Logger LOG=LoggerFactory.getLogger(MapaSincronizadoServiceImpl.class);
    @Inject
    private CrudService crud;
    
    @Override
    public MapaSincronizado sincronizarTemp(MapaSincronizado mapa) {
        try{
        if (mapa.getId()==null){
            mapa=crud.create(mapa);
        }else{
            mapa=crud.update(mapa);
        }
        LOG.info("Sincronizado correcto id: "+mapa.getId()+ " - "+mapa.getFecha());
        }catch(RuntimeException ex){
            LOG.error("Error al sincronizar mapa");
            throw ex;
        }
        
        return mapa;
    }

    @Override
    public  List<MapaSincronizadoDTO> findTemporales() {
        List<MapaSincronizadoDTO> lst=new ArrayList<MapaSincronizadoDTO>();
        List<MapaSincronizado> result=null;
        
        try{
            result=crud.findByNamedQuery(MapaSincronizado.FIND_ALL);
            if (!CollectionsUtil.isEmpty(result)){
                for(MapaSincronizado m:result){
                    lst.add(ConvertBeanUtil.toMapaSincDTO(m,false));
                }
            }
            LOG.info("Listado obtenido exitosamente, tam: "+lst.size());
        }catch(RuntimeException ex){
            LOG.error("Error al obtener mapas de procesos");
        }
        return lst;
    }

    @Override
    public MapaSincronizadoDTO findById(Integer id) {
       MapaSincronizadoDTO mapaDTO=new MapaSincronizadoDTO();
       MapaSincronizado result=null;
       try{
           result=crud.find(id, MapaSincronizado.class);
           if (result!=null){
               mapaDTO=ConvertBeanUtil.toMapaSincDTO(result, true);
           }
           LOG.info("Mapa obtenido correctamente");
       }catch(RuntimeException ex){
           LOG.error("Error al obtener mapa");
           throw ex;
       }
       return mapaDTO;
    }

    @Override
    public Map eliminarMapa(Integer id) {
        Map map=new HashMap();
        MapaSincronizado object=null;
        try{
           object=crud.find(id, MapaSincronizado.class);
           if (object!=null){
               crud.getEm().remove(object);
               map.put("error",false);
           }
           LOG.info("Mapa eliminado correctamente");
       }catch(RuntimeException ex){
           LOG.error("Error al obtener mapa");
           map.put("error",true);
           throw ex;
       }
        return map;
    }
    
    
    
    
    
    
    
}
